package ar.fiuba.fallar2.pac_man.utils;

import java.awt.Point;
import java.util.List;

import ar.fiuba.fallar2.pac_man.celdaVacia.model.CeldaVacia;
import ar.fiuba.fallar2.pac_man.fantasma.model.Fantasma;
import ar.fiuba.fallar2.pac_man.fruta.model.Fruta;
import ar.fiuba.fallar2.pac_man.pared.model.Pared;
import ar.fiuba.fallar2.pac_man.pildora.model.Pildora;
import ar.fiuba.fallar2.pac_man.puntoOrdinario.model.PuntoOrdinario;

public class FabricaDeMapas { //crea los mapas
       
        public static Mapa obtenerMapa(int num){
                switch(num){
                case 0: return crearMapa0();
                case 1: return crearMapa1();
                default: return null;
                }
        }

        private static Mapa crearMapa0() {
                
                Mapa mapa;
                
                Point punto;
                int x,y;
                
                //(x,y) x columnas, y filas
               
                mapa = new Mapa(19,17, new Point(9,9),104);
                
                
                
                mapa.crearPersonajes();
                mapa.crearFrutasYPildoras();
                mapa.setPuntajePremio(200);
              
            
                List listaFantasmas= mapa.getListaFantasmas();
                Fantasma f=(Fantasma)listaFantasmas.get(0);
                f.setUbicacion(new Point(3,3));
                f=(Fantasma)listaFantasmas.get(1);
                f.setUbicacion(new Point(15,3));
                f=(Fantasma)listaFantasmas.get(2);
                f.setUbicacion(new Point(4,11));
                f=(Fantasma)listaFantasmas.get(3);
                f.setUbicacion(new Point(14,11));
                 
                /*mapa.setPosFreferidaVioleta();
                mapa.setPosPreferidaCeleste(new Point(15,3));
                mapa.setPosPreferidaNaranja(new Point(4,11));
                mapa.setPosPreferidaRojo(new Point(14,11));
                */
                
                
                // agrego las celdas desde (0,0) hasta (18,0)
                for (x=0;x<18+1;x++){
                        punto = new Point(x,0);
                        CeldaVacia celda =new CeldaVacia();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (0,16) hasta (18,16)
                for (x=0;x<18+1;x++){
                        punto = new Point(x,16);
                        CeldaVacia celda =new CeldaVacia();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (0,1) hasta (0,15)
                for (y=1;y<15+1;y++){
                        punto = new Point(0,y);
                        CeldaVacia celda =new CeldaVacia();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (18,1) hasta (18,15)
                for (y=1;y<15+1;y++){
                        punto = new Point(18,y);
                        CeldaVacia celda =new CeldaVacia();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas pared desde (1,1) hasta (17,1)
                for (x=1;x<17+1;x++){
                        punto = new Point(x,1);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas pared desde (1,15) hasta (17,15)
                for (x=1;x<17+1;x++){
                        punto = new Point(x,15);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas pared desde (1,2) hasta (1,14)
                for (y=2;y<14+1;y++){
                        punto = new Point(1,y);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
               }
               
                //agrego las celdas pared desde (17,2) hasta (17,14)
                for (y=2;y<14+1;y++){
                        punto = new Point(17,y);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas punto ordinario desde (2,2) hasta (16,2)
                for (x=2;x<16+1;x++){
                        punto = new Point(x,2);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas punto ordinario desde (2,14) hasta (16,14)
                for (x=2;x<16+1;x++){
                        punto = new Point(x,14);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas punto ordinario desde (2,4) hasta (2,12)
                for (y=4;y<12+1;y++){
                        punto = new Point(2,y);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas punto ordinario desde (16,4) hasta (16,12)
                for (y=4;y<12+1;y++){
                        punto = new Point(16,y);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                List listaPildoras=mapa.getListaPildoras();
                //agrego en la posicion (2,3) punto poder
              
                punto = new Point(2,3);
                Pildora pildora = (Pildora)mapa.getListaPildoras().get(0);
                pildora.setUbicacion(punto);
                mapa.agregar(punto, pildora);
               
                //agrego en la posicion (16,3) punto poder
                punto = new Point(16,3);
                pildora = (Pildora)mapa.getListaPildoras().get(1);
                pildora.setUbicacion(punto);
                mapa.agregar(punto, pildora);
               
                //agrego en la posicion (2,13) punto poder
                punto = new Point(2,13);
                pildora = (Pildora)mapa.getListaPildoras().get(2);
                pildora.setUbicacion(punto);

                mapa.agregar(punto, pildora);
               
                //agrego en la posicion (16,13)
                punto = new Point(16,13);
                pildora = (Pildora)mapa.getListaPildoras().get(3);
                pildora.setUbicacion(punto);

                mapa.agregar(punto, pildora);
               
                //agrego las celdas pared desde (3,3) hasta (4,3)
                for (x=3;x<4+1;x++){
                        punto = new Point(x,3);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                List listaFrutas=mapa.getListaFrutas();
                //agrego punto ordinario posicion (5,3)
                punto = new Point(5,3);
                Fruta fruta=(Fruta)mapa.getListaFrutas().get(0);
                fruta.setUbicacion(punto);
                mapa.agregar(punto, fruta);
               
                //agrego las celdas pared desde (6,3) hasta (7,3)
                for (x=6;x<7+1;x++){
                        punto = new Point(x,3);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego punto ordinario posicion (8,3)
                punto = new Point(8,3);
                PuntoOrdinario po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego pared posicion (9,3)
                punto = new Point(9,3);
                Pared prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
       
                //agrego punto ordinario posicion (10,3)
                punto = new Point(10,3);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
               
                //agrego las celdas pared desde (11,3) hasta (12,3)
                for (x=11;x<12+1;x++){
                        punto = new Point(x,3);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego punto ordinario posicion (13,3)
                punto = new Point(13,3);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas pared desde (14,3) hasta (15,3)
                for (x=14;x<15+1;x++){
                        punto = new Point(x,3);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (3,4) hasta (4,4)
                for (x=3;x<4+1;x++){
                        punto = new Point(x,4);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego punto ordinario posicion (5,4)
                punto = new Point(5,4);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (6,4) hasta (7,4)
                for (x=6;x<7+1;x++){
                        punto = new Point(x,4);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego punto ordinario posicion (8,4)
                punto = new Point(8,4);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego pared posicion (9,4)
                punto = new Point(9,4);
                prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
               
                //agrego punto ordinario posicion (10,4)
                punto = new Point(10,4);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (11,4) hasta (12,4)
                for (x=11;x<12+1;x++){
                        punto = new Point(x,4);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (13,4)
                punto = new Point(13,4);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (14,4) hasta (15,4)
                for (x=14;x<15+1;x++){
                        punto = new Point(x,4);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego los puntos ordinarios desde (3,5) hasta (15,5)
                for (x=3;x<15+1;x++){
                        punto = new Point(x,5);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas pared desde (3,6) hasta (5,6)
                for (x=3;x<5+1;x++){
                        punto = new Point(x,6);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (6,6)
                punto = new Point(6,6);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (7,6) hasta (8,6)
                for (x=7;x<8+1;x++){
                        punto = new Point(x,6);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego puerta posicion (9,6)
                punto = new Point(9,6);
                prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
               
                //agrego las celdas desde (10,6) hasta (11,6)
                for (x=10;x<11+1;x++){
                        punto = new Point(x,6);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (12,6)
                punto = new Point(12,6);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (13,6) hasta (15,6)
                for (x=13;x<15+1;x++){
                        punto = new Point(x,6);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda); }
               
                //agrego las celdas pared desde (3,7) hasta (5,7)
                for (x=3;x<5+1;x++){
                        punto = new Point(x,7);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (6,7)
                punto = new Point(6,7);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas pared desde (7,7) hasta (11,7)
                for (x=7;x<11+1;x++){
                        punto = new Point(x,7);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (12,7)
                punto = new Point(12,7);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
               
                //agrego las celdas desde (13,7) hasta (15,7)
                for (x=13;x<15+1;x++){
                        punto = new Point(x,7);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego las celdas desde (3,8) hasta (5,8)
                for (x=3;x<5+1;x++){
                        punto = new Point(x,8);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (6,8)
                punto = new Point(6,8);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
               
                //agrego las celdas desde (7,8) hasta (11,8)
                for (x=7;x<11+1;x++){
                        punto = new Point(x,8);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
               
                //agrego punto ordinario posicion (12,8)
                punto = new Point(12,8);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (13,8) hasta (15,8)
                for (x=13;x<15+1;x++){
                        punto = new Point(x,8);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        
                }
               
                //agrego las celdas desde (3,9) hasta (15,9)
                for (x=3;x<15+1;x++){
                        punto = new Point(x,9);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (3,10) hasta (5,10)
                for (x=3;x<5+1;x++){
                        punto = new Point(x,10);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);}
                        
               
                //agrego punto ordinario posicion (6,10)
                punto = new Point(6,10);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (7,10) hasta (11,10)
                for (x=7;x<11+1;x++){
                        punto = new Point(x,10);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
                //agrego punto ordinario posicion (12,10)
                punto = new Point(12,10);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego las celdas desde (13,10) hasta (15,10)
                for (x=13;x<15+1;x++){
                        punto = new Point(x,10);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                         }
               
               
                //agrego las celdas desde (3,11) hasta (5,11)
                for (x=3;x<5+1;x++){
                        punto = new Point(x,11);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                         }
               
                //agrego las celdas desde (6,11) hasta (8,11)
                for (x=6;x<8+1;x++){
                        punto = new Point(x,11);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego pared posicion (9,11)
                punto = new Point(9,11);
                 prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
                
                //agrego las celdas desde (10,11) hasta (12,11)
                for (x=10;x<12+1;x++){
                        punto = new Point(x,11);
                        PuntoOrdinario celda = new PuntoOrdinario();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                }
               
                //agrego las celdas desde (13,11) hasta (15,11)
                for (x=13;x<15+1;x++){
                        punto = new Point(x,11);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
                //agrego las celdas desde (3,12) hasta (7,12)
                for (x=3;x<7+1;x++){
                        punto = new Point(x,12);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
                //agrego punto ordinario posicion (8,12)
                punto = new Point(8,12);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
              
               
                //agrego pared posicion (9,12)
                punto = new Point(9,12);
                prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
                
                //agrego punto ordinario posicion (10,12)
                punto = new Point(10,12);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
               
                //agrego las celdas desde (11,12) hasta (15,12)
                for (x=11;x<15+1;x++){
                        punto = new Point(x,12);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
                //agrego las celdas desde (3,13) hasta (7,13)
                for (x=3;x<7+1;x++){
                        punto = new Point(x,13);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
                //agrego punto ordinario posicion (8,13)
                punto = new Point(8,13);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
                //agrego pared posicion (9,13)
                punto = new Point(9,13);
                prd = new Pared();
                prd.setUbicacion(punto);
                mapa.agregar(punto, prd);
                 
                //agrego punto ordinario posicion (10,13)
                punto = new Point(10,13);
                po = new PuntoOrdinario();
                po.setUbicacion(punto);
                mapa.agregar(punto, po);
               
               
                //agrego las celdas desde (11,13) hasta (15,13)
                for (x=11;x<15+1;x++){
                        punto = new Point(x,13);
                        Pared celda = new Pared();
                        celda.setUbicacion(punto);
                        mapa.agregar(punto, celda);
                        }
               
               
               
              return mapa;
        }


//posible segundo mapa
        private static Mapa crearMapa1(){
               
                return null;
               
        }

}
